"""
演示第三个图表，GDP动态柱状图开发
"""
import os
from pyecharts.charts import Bar, Timeline
from pyecharts.options import LabelOpts, InitOpts, TitleOpts, LegendOpts
from pyecharts.globals import ThemeType

current_path = os.getcwd()

# 读取数据
f = open(current_path + "/1960-2019全球GDP数据.csv", "r", encoding="GB2312")
data_lines = f.readlines()
f.close()
data_lines.pop(0)
# print(data_lines)
# 将数据转换成字典存储，格式为：
# {年份：[[国家，gdp],[国家，gdp],......], 年份：[[国家，gdp],[国家，gdp],......],......}
data_dict = {}
for line in data_lines:
    year = int(line.split(",")[0])
    country = line.split(",")[1]
    gdp = float(line.split(",")[2])
    try:
        # 如果当前年份已存在
        data_dict[year].append([country, gdp])
    except KeyError as e:
        # 如果当前年份不存在
        data_dict[year] = []
        data_dict[year].append([country, gdp])

# print(data_dict)
# 排序年份
year_list = sorted(data_dict.keys())
# print(year_list)
# 创建时间线
timeline = Timeline(init_opts=InitOpts(theme=ThemeType.LIGHT))
for year in year_list:
    data_dict[year].sort(key=lambda element: element[1], reverse=True)
    # 只需要每年的前8名
    year_gdp_list = data_dict[year][:8:1]
    x_data = []
    y_data = []
    # 组装x轴，y轴数据
    for temp in year_gdp_list:
        x_data.append(temp[0])
        y_data.append(temp[1] / 100000000)
    # 创建柱状图
    temp_bar = Bar()
    # 设置柱状图数据
    temp_bar.add_xaxis(x_data[::-1])
    temp_bar.add_yaxis("GDP(亿美元)", y_data[::-1], label_opts=LabelOpts(position="right"))
    temp_bar.set_global_opts(
        title_opts=TitleOpts(title=f"{year}年全球GDP前8国家"),
        legend_opts=LegendOpts(is_show=True)
    )
    # 柱状图横纵坐标反转
    temp_bar.reversal_axis()
    # 将柱状图加入时间线
    timeline.add(temp_bar, str(year))

# 时间线自动播放设置
timeline.add_schema(
    play_interval=500,  # 自动播放的时间间隔，单位：毫秒
    is_timeline_show=True,  # 是否在自动播放的时候显示时间线
    is_auto_play=True,  # 是否自动播放
    is_loop_play=False  # 是否循环播放
)

# 时间线绘图
timeline.render("1960-2019年全球GDP前8国家动态柱状图.html")
